package org.example.App;

import com.sun.net.httpserver.HttpServer;

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;


public class Main {
    public static void main(String[] args) throws IOException {
        if (args.length == 0) {
            server();
            return;
        }
        // 遍历参数数组
        int i = 0;
        while (i < args.length) {
            switch (args[i]) {
                case "-html":
                    if (i + 1 < args.length) {
                        String host = args[i + 1];
                        System.out.println("参数值为： " + host);
                        // 在这里执行与参数值相关的逻辑
                        // 例如，你可以将参数值传递给其他方法或类进行处理
                        initFile.setHtmlFile(host);
                        i++; // 跳过参数值
                    }
                    break;
                case "--port":
                    if (i + 1 < args.length) {
                        int port = Integer.parseInt(args[i + 1]);
                        System.out.println("参数值为： " + port);
                        // 在这里执行与参数值相关的逻辑
                        // 例如，你可以将参数值传递给其他方法或类进行处理
                        initFile.setPort(port);
                        i++; // 跳过参数值
                    }
                    break;
                case "-name":
                    if (i + 1 < args.length) {
                        String name = args[i + 1];
                        System.out.println("参数值为： " + name);
                        // 在这里执行与参数值相关的逻辑
                        // 例如，你可以将参数值传递给其他方法或类进行处理
                        initFile.setHtmlName(name);
                        i++; // 跳过参数值
                    }
                    break;
                case "-H":
                case "-h":
                case "--help":
                    System.out.println("----------------帮助信息----------------");
                    System.out.println("--port 端口号 默认 8080");
                    System.out.println("--help(或：-h,-H)：查看帮助信息");
                    System.out.println("-html: html 文件夹路径 默认./html");
                    System.out.println("-name: html 文件名 默认index.html");
                    System.out.println("---------------------------------------");
                    return;
                default:
                    System.out.println("未知参数： " + args[i]);
                    System.out.println("使用方法： --help (或：-h,-H) 查看帮助信息");
                    // 处理未知参数的逻辑
                    return;
            }
            i++;
        }
        server();

    }


    public static void server() throws IOException {
        //这行代码创建了一个HTTP服务器实例，
        // 并将其绑定到本地主机的8080端口。
        // HttpServer.create()方法是一个静态工厂方法，用于创建HttpServer实例。
        // new InetSocketAddress(8080)创建了一个InetSocketAddress对象，指定了服务器的监听地址和端口。
        // 第二个参数0表示服务器的backlog（等待连接的队列长度），这里设置为0表示使用默认值。
        System.out.println("服务器正在 端口 上运行： " + initFile.getPort());
        HttpServer server = HttpServer.create(new InetSocketAddress(initFile.getPort()), 0);
        // 获取服务器的InetSocketAddress
        InetSocketAddress serverAddress = server.getAddress();
        // 从InetSocketAddress中获取InetAddress
        InetAddress address = serverAddress.getAddress();
        // 打印IP地址
        if (address != null) {
            System.out.println("服务器正在 IP 地址 上运行： " + address.getHostAddress());

            System.out.println("服务器正在可以使用访问： http://localhost:" + serverAddress.getPort());
        } else {
            System.out.println("无法检索服务器的 IP 地址。");
        }
        // 为服务器创建一个上下文，处理根路径（`/`）的请求
        server.createContext("/", new HtmlServer());

        // 设置服务器的执行器为默认值
        server.setExecutor(null); // creates a default executor
        server.start();
    }

}